#include "StdAfx.h"
#include "CircuitBezierDisObj.h"


CCircuitBezierDisObj::CCircuitBezierDisObj(CCircuitBezier *pCirBezier)
	: CCircuitUnitDisObj(pCirBezier)
{
}

CCircuitBezierDisObj::CCircuitBezierDisObj(const CCircuitBezierDisObj *pDisObj, CCircuitBezier *pCirBezier/* =NULL */)
	: CCircuitUnitDisObj(pDisObj, pCirBezier)
{

}

CCircuitBezierDisObj::~CCircuitBezierDisObj(void)
{
}

void CCircuitBezierDisObj::Serialize(CArchive & ar)
{
	CCircuitUnitDisObj::Serialize(ar);
}

void CCircuitBezierDisObj::Display(CHoopsMap *pHoopsMap)
{
	CCircuitBezier *pCirBezier = (CCircuitBezier *)GetEntityObj();
	if (!pCirBezier)
	{
		return;
	}

	HC_KEY key_obj = INVALID_KEY;
	char sLineSeg[64];
	sprintf(sLineSeg, "curve_%d", pCirBezier->GetId());
	key_obj = HC_Open_Segment(sLineSeg);

	HC_Flush_Contents(".", "everything");
	//
	list<double> lst = pCirBezier->GetPosList();
	while(lst.size() < 8)
	{
		lst.push_back(lst.back());
	}
	list<double>::iterator pos_lst = lst.begin();
	float pts[4][3] = {
		{  (*pos_lst++), (*pos_lst++),  0 },
		{  (*pos_lst++), (*pos_lst++),  0 },
		{  (*pos_lst++), (*pos_lst++),  0 },
		{  (*pos_lst++), (*pos_lst),  0 },		
	};
	float mWeight[4]={100, 100, 100, 100};
	float knots[8] = { 0, 0, 0, 1, 1, 2, 2, 3 };
	HC_Insert_NURBS_Curve (0, 4, pts, mWeight, NULL, 0, 1);

	//

	HC_Set_Line_Weight(2);

	char szColorPattern[64];
	sprintf(szColorPattern, "lines = (r=%.2f g=%.2f b=%.2f)",
		pCirBezier->GetColorR(), pCirBezier->GetColorG(), pCirBezier->GetColorB());
	HC_Set_Color(szColorPattern);
	HC_Close_Segment();

	pHoopsMap->Delete(this);
	pHoopsMap->Add(key_obj, this);

}

void CCircuitBezierDisObj::Transform(const CMatrix transf)
{

}

CObj *CCircuitBezierDisObj::Clone() const
{
	return new CCircuitBezierDisObj(this);
}

bool CCircuitBezierDisObj::GetBox(double & dblLeft, double & dblBottom, double & dblRight, double & dblTop) const
{
	return false;
}

eCircuitUnitType CCircuitBezierDisObj::GetCircuitUnitType() const
{
	return CIRCUIT_BEZIRE_DISOBJ;
}